{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Solving the Krusell-Smith model in sequence space\n",
    "In this notebook we show how to\n",
    "1. [Set up a heterogeneous-agent block](#1-hetblock)\n",
    "2. [Calibrate a model numerically](#2-calibration)\n",
    "3. [Compute the Jacobian \"by hand\" as well as automatically](#3-jacobian)\n",
    "4. [Compute linearized impulse responses](#4-linear)\n",
    "5. [Estimate shock parameters](#5-estimate)\n",
    "6. [Compute nonlinear impulse responses](#6-nonlinear)\n",
    "\n",
    "This notebook accompanies the working paper Auclert, Bardóczy, Rognlie, Straub (2019): \"Using the Sequence-Space Jacobian to Solve and Estimate Heterogeneous-Agent Models\". Please see the [Github repository](https://github.com/shade-econ/sequence-jacobian) for more information and code.\n",
    "\n",
    "## Model description\n",
    "For a detailed description of the model, please see the paper. As a quick reminder, it can be written in sequence space as\n",
    "\n",
    "$$\n",
    "\\textbf{H}_t(\\textbf{U}, Z) \\equiv \n",
    "\\begin{pmatrix}\n",
    "%Y_t - Z_t K_t^\\alpha L^{1-\\alpha}\n",
    "%\\\\\n",
    "r_t + \\delta - \\alpha Z_t \\left(\\frac{K_{t-1}}{L_t}\\right)^{\\alpha-1} \n",
    "\\\\\n",
    "w_t - (1-\\alpha) Z_t \\left(\\frac{K_{t-1}}{L_t}\\right)^{\\alpha}\n",
    "\\\\\n",
    "L_t - \\sum_e \\pi(e) e\n",
    "\\\\\n",
    "\\mathcal{K}_t(\\{r_s, w_s\\}) - K_t\n",
    "\\end{pmatrix}\n",
    "= \\begin{pmatrix}  0 \\\\ 0 \\\\ 0 \\\\ 0\\end{pmatrix},\n",
    "\\qquad t = 0, 1, \\dots\n",
    "$$\n",
    "\n",
    "where the (aggregate) endogenous variables are $\\textbf{U} = (K, L, r, w)$ and the only exogenous variable is $Z$. Let's normalize $\\sum_e \\pi(e) e = 1$ without loss of generality.\n",
    "\n",
    "The capital function $\\mathcal{K}$ follows from the household block characterized by a Bellman equation\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "V_t(e, k_{-}) = \\max_{c, k} &\\left\\{\\frac{c^{1-\\sigma}}{1-\\sigma} + \\beta \\sum_{e'}V_{t+1}(e', k) \\mathcal{P}(e, e') \\right\\}\n",
    "\\\\\n",
    "c + k &= (1 + r_t)k_{-} + w e \n",
    "\\\\\n",
    "k &\\geq 0\n",
    "\\end{align}\n",
    "$$\n",
    "\n",
    "We can represent this model as a simple Directed Acyclic Graph in just 1 unknown $K$ and 1 target, asset market clearing:\n",
    "\n",
    "![Directed Acyclical Graph](figures/ks_dag.png) \n",
    "\n",
    "and write it as\n",
    "\n",
    "$$\n",
    "H_t(K, Z) \\equiv \\mathcal{K}_t\\left(\\left\\{\\alpha Z_s K_{s-1}^{\\alpha-1} - \\delta, (1-\\alpha) Z_s K_{s-1}^{\\alpha}\\right\\}\\right) - K_t = 0.\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 0 Import packages\n",
    "The first five are standard python packages, the rest contain code we wrote for this project. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from numba import njit\n",
    "import scipy.optimize as opt\n",
    "import scipy.linalg as linalg\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import utils\n",
    "import het_block as ha\n",
    "import simple_block as sim\n",
    "from simple_block import simple\n",
    "from het_block import het\n",
    "import jacobian as jac\n",
    "import estimation as est\n",
    "import nonlinear\n",
    "import krusell_smith as ks"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=\"1-hetblock\"></a>\n",
    "\n",
    "## 1 Set up heterogeneous-agent block\n",
    "The main task here is to write a **backward iteration function** that represents the Bellman equation. This has to be a single step of an iterative solution method such as value function iteration that solves for optimal policy on a grid. For the standard income fluctuation problem we're dealing with here, the endogenous gridpoint method of [Carroll (2006)](https://www.sciencedirect.com/science/article/pii/S0165176505003368) is the best practice. \n",
    "\n",
    "Once we have the backward iteration function, we can use the decorator `@het` to turn it into a HetBlock. All we have to do is specify the transition matrix for exogenous states `exogenous`, the policy corresponding to the endogenous state(s) `policy` (currently up to two states), and the backward variable `backward` on which we're iterating (here the first derivative `Va` of the value function with respect to assets)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "@het(exogenous='Pi', policy='a', backward='Va')\n",
    "def household(Va_p, Pi_p, a_grid, e_grid, r, w, beta, eis):\n",
    "    \"\"\"Single backward iteration step using endogenous gridpoint method for households with CRRA utility.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "    Va_p     : array (S*A), marginal value of assets tomorrow\n",
    "    Pi_p     : array (S*S), Markov matrix for skills tomorrow\n",
    "    a_grid   : array (A), asset grid\n",
    "    e_grid   : array (A), skill grid\n",
    "    r        : scalar, ex-post real interest rate\n",
    "    w        : scalar, wage\n",
    "    beta     : scalar, discount rate today\n",
    "    eis      : scalar, elasticity of intertemporal substitution\n",
    "\n",
    "    Returns\n",
    "    ----------\n",
    "    Va : array (S*A), marginal value of assets today\n",
    "    a  : array (S*A), asset policy today\n",
    "    c  : array (S*A), consumption policy today\n",
    "    \"\"\"\n",
    "    uc_nextgrid = (beta * Pi_p) @ Va_p\n",
    "    c_nextgrid = uc_nextgrid ** (-eis)\n",
    "    coh = (1 + r) * a_grid[np.newaxis, :] + w * e_grid[:, np.newaxis]\n",
    "    a = utils.interpolate_y(c_nextgrid + a_grid, coh, a_grid)\n",
    "    utils.setmin(a, a_grid[0])\n",
    "    c = coh - a\n",
    "    Va = (1 + r) * c ** (-1 / eis)\n",
    "    return Va, a, c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'het_block.HetBlock'>\n"
     ]
    }
   ],
   "source": [
    "print(type(household))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As its name suggests, HetBlock is a general class of heterogeneous-agent blocks that comes with useful methods, such as solving for steady-state policy functions by iteration, updating the distribution of agents across states using these policy rules interpolated against a grid, and computing/storing Jacobians. We are going to cover the the most important methods in this notebook."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=\"2-calibration\"></a>\n",
    "\n",
    "## 2 Calibrating the steady state\n",
    "Next, we calibrate the model in general equilibrium. The calibration exercise amounts to finding the right discount factor $\\beta$ to hit a targeted interest rate conditional on all the other exogenous parameters. We use Brent's method, an efficient way to solve for a root on an interval, from the `scipy.optimize` package to do so.\n",
    "\n",
    "Although additional efficiency gains would be possible here (for instance, by updating our initial guesses for policy and distribution along the way), we will not implement them, since they are not our focus here.\n",
    "\n",
    "Our default values depart slightly from the canonical Krusell-Smith calibration, mainly by assuming a 7-state income process and a lower capital share. More risk increases the precautionary savings motive, while less capital limits the ability to self-insure. These changes lead to higher MPCs and less RA-like behavior."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def ks_ss(lb=0.98, ub=0.999, r=0.01, eis=1, delta=0.025, alpha=0.11, rho=0.966, sigma=0.5, nS=7, nA=500, amax=200):\n",
    "    \"\"\"Solve steady state of full GE model. Calibrate beta to hit target for interest rate.\n",
    "    \n",
    "    Parameters\n",
    "    ----------\n",
    "    lb    : scalar, lower bound of interval bracketing beta\n",
    "    ub    : scalar, upper bound of interval bracketing beta\n",
    "    r     : scalar, real interest rate\n",
    "    eis   : scalar, elasticity of intertemporal substitution\n",
    "    delta : scalar, depreciation rate\n",
    "    alpha : scalar, capital share\n",
    "    rho   : scalar, autocorrelation of income process\n",
    "    sigma : scalar, cross-sectional sd of log income\n",
    "    nS    : int, number of income gridpoints\n",
    "    nA    : int, number of capital gridpoints\n",
    "    amax  : scalar, upper bound of capital grid\n",
    "\n",
    "    Returns\n",
    "    ----------\n",
    "    ss : dict, steady state values\n",
    "    \"\"\"\n",
    "    # set up grid\n",
    "    a_grid = utils.agrid(amax=amax, n=nA)\n",
    "    e_grid, pi_s, Pi = utils.markov_rouwenhorst(rho=rho, sigma=sigma, N=nS)\n",
    "    \n",
    "    # solve analytically what we can\n",
    "    rk = r + delta\n",
    "    Z = (rk / alpha) ** alpha  # normalize so that Y=1\n",
    "    K = (alpha * Z / rk) ** (1 / (1 - alpha))\n",
    "    Y = Z * K ** alpha\n",
    "    w = (1 - alpha) * Z * (alpha * Z / rk) ** (alpha / (1 - alpha))\n",
    "    \n",
    "    # initialize guess for policy function iteration\n",
    "    coh = (1 + r) * a_grid[np.newaxis, :] + w * e_grid[:, np.newaxis]\n",
    "    Va = (1 + r) * (0.1 * coh) ** (-1 / eis)\n",
    "\n",
    "    # solve for beta\n",
    "    beta_min = lb / (1 + r)\n",
    "    beta_max = ub / (1 + r)\n",
    "    beta, sol = opt.brentq(lambda bet: household.ss(Pi=Pi, a_grid=a_grid, e_grid=e_grid, r=r, w=w, beta=bet, eis=eis,\n",
    "                                                    Va=Va)['A'] - K, beta_min, beta_max, full_output=True)\n",
    "    if not sol.converged:\n",
    "        raise ValueError('Steady-state solver did not converge.')\n",
    "\n",
    "    # extra evaluation for reporting\n",
    "    ss = household.ss(Pi=Pi, a_grid=a_grid, e_grid=e_grid, r=r, w=w, beta=beta, eis=eis, Va=Va)\n",
    "    \n",
    "    # check Walras's law\n",
    "    walras = Y - ss['C'] - delta * K\n",
    "    assert np.abs(walras) < 1E-8\n",
    "    \n",
    "    # add aggregate variables\n",
    "    ss.update({'w': w, 'Z': Z, 'K': K, 'L': 1, 'Y': Y, 'alpha': alpha, 'delta': delta, 'walras': walras})\n",
    "\n",
    "    return ss"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice the use of `household.ss` to evaluate steady-state asset demand for given inputs. This is the first HetBlock method we see in action.\n",
    "\n",
    "Let's solve for the steady state using our default calibration, and plot the consumption policy function for all skill types  as a function of assets."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ss = ks_ss()\n",
    "plt.plot(ss['a_grid'][:10], ss['a'][:, :10].T)\n",
    "plt.xlabel('Assets'), plt.ylabel('Consumption')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(7, 500)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ss['c'].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.31353217e-02, 5.84480912e-05, 5.27129890e-05, 3.75346415e-05,\n",
       "       3.30050545e-05])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ss['D']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Speed of steady-state solution\n",
    "Our backward and forward iterations use Numba, [a just-in-time compilation library](https://numba.pydata.org/numba-doc/dev/user/5minguide.html) that translates pure numerical Python to fast machine code. The first time functions are run, there is some compilation lag, similar to (but much less time-consuming than) compilation time in languages like C++, Fortran, and Julia.\n",
    "\n",
    "Now that we have run everything once, we can time our steady-state calibration routine. An efficient steady state is not the focus of this notebook or our methods, but it is nice to see that performance is still quite good:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 646 ms, sys: 5.73 ms, total: 652 ms\n",
      "Wall time: 651 ms\n"
     ]
    }
   ],
   "source": [
    "%time ss = ks_ss()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Indeed, this simple example is so fast that increasing the number of asset gridpoints from 500 to 2000, and thus the total number of states from $7 \\times 500=3500$ to $7 \\times 2000 = 14000,$ increases computation time by less than a factor of four."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 3.38 s, sys: 49 ms, total: 3.43 s\n",
      "Wall time: 1.73 s\n"
     ]
    }
   ],
   "source": [
    "%time _ = ks.ks_ss(nA=2000)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=\"3-jacobian\"></a>\n",
    "\n",
    "## 3 Jacobians\n",
    "Jacobians are the key concept to solve and to estimate models in sequence space. Each model block has its own Jacobians, which can be combined via the chain rule into Jacobians for the complete model. A Jacobian in a $T$-dimensional (truncated) sequence space is a $T \\times T$ matrix of the form\n",
    "\n",
    "$$\n",
    "\\frac{d Y}{d X} = \n",
    "\\begin{pmatrix}\n",
    "\\frac{d Y_0}{d X_0} & \\frac{d Y_0}{d X_1} & \\dots & \\frac{d Y_0}{d X_T} \\\\\n",
    "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n",
    "\\frac{d Y_T}{d X_0} & \\frac{d Y_T}{d X_1} & \\dots & \\frac{d Y_T}{d X_T}\n",
    "\\end{pmatrix}\n",
    "$$\n",
    "\n",
    "evaluated at the steady state. Every column can be interpreted as the impulse response to a one-period news shock.\n",
    "\n",
    "### 3.1 Simple blocks\n",
    "To build intuition, let's start with the firm block. In our code, simple blocks are specified as regular Python functions with the added decorator ``@simple``. In the body of the function, we directly implement the corresponding equilibrium conditions. The decorator turns the function into an instance of ``SimpleBlock``, a class that, among other things, knows how to handle time displacements such as `K(-1)` to denote 1-period lags and `r(+1)` to denote 1-period leads. In general, one can write (-s) and (+s) to denote s-period lags and leads."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "@simple\n",
    "def firm(K, L, Z, alpha, delta):\n",
    "    r = alpha * Z * (K(-1) / L) ** (alpha-1) - delta\n",
    "    w = (1 - alpha) * Z * (K(-1) / L) ** alpha\n",
    "    Y = Z * K(-1) ** alpha * L ** (1 - alpha)\n",
    "    return r, w, Y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Simple blocks can compute their Jacobians by using the method `SimpleBlock.jac` This takes in the steady state dict returned by `ks_ss` and two optional inputs: the truncation horizon and list of variables to differentiate with respect to. It returns the Jacobians in a nested dict, where the first level is the output variable $Y$ and the second level is the input variable $X$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1.13424196 0.         0.         0.         0.        ]\n",
      " [0.         1.13424196 0.         0.         0.        ]\n",
      " [0.         0.         1.13424196 0.         0.        ]\n",
      " [0.         0.         0.         1.13424196 0.        ]\n",
      " [0.         0.         0.         0.         1.13424196]]\n"
     ]
    }
   ],
   "source": [
    "J_firm = firm.jac(ss, T=5, shock_list=['K', 'Z'])\n",
    "print(J_firm['Y']['Z']) # Jacobian of output Y vs. TFP Z"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By default, `SimpleBlock.jac` compoutes the Jacobian for each input-output pair. In practice, it only makes sense to do so with respect to endogenous variables and shocks, hence the `shock_list` option. In this model, capital and TFP are the only inputs that will ever change.\n",
    "\n",
    "The Jacobian is diagonal because the production function does not depend on leads or lags of productivity. Such sparsity is very common for simple blocks, and we wrote the SimpleBlock class to take full advantage of it. For example, if we leave the truncation parameter $T$ unspecified, which is recommended, `SimpleBlock.jac` returns a more efficient sparse representation of the Jacobian."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SimpleSparse({(0, 0): 1.134})\n"
     ]
    }
   ],
   "source": [
    "J_firm_sparse = firm.jac(ss, shock_list=['K', 'Z'])\n",
    "print(J_firm_sparse['Y']['Z'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The output means that the only non-zero element is 1.134 along the main diagonal."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2 HA blocks\n",
    "HA blocks have more complicated Jacobians, but they have a regular structure that we can exploit to calculate them very quickly. For comprehensive coverage of our **fake news algorithm**, please see the [het-agent Jacobian notebook](het_jacobian.ipynb) as well as the paper.\n",
    "\n",
    "HetBlocks have a `HetBlock.jac` method that is analogous to `SimpleBlock.jac` above."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0.09578534 -0.68179015 -0.64119935 -0.60434415 -0.57057436]\n",
      " [ 0.09413756  0.13463153 -0.64841526 -0.61133486 -0.5771951 ]\n",
      " [ 0.09250592  0.12963223  0.16651935 -0.61980277 -0.58527967]\n",
      " [ 0.09087539  0.12509918  0.15952962  0.1938437  -0.59485549]\n",
      " [ 0.08926245  0.12116257  0.15312513  0.18541035  0.21770361]]\n"
     ]
    }
   ],
   "source": [
    "J_ha = household.jac(ss, T=5, shock_list=['r', 'w'])\n",
    "print(J_ha['C']['r'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice that this matrix is no longer sparse. This generally the case for HA blocks. The Bellman equation implies that policies are forward-looking, and then aggregates are also backward-looking due to persistence coming via the distribution.\n",
    "\n",
    "Fortunately, our `SimpleSparse` Jacobians play nicely with these full matrices, so that we can easily combine the Jacobians of simple blocks and HA blocks. For example, the multiplication operator `@` maps any combination of SimpleSparse and full matrices into full matrices.   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0.00380253 -0.02706602 -0.02545463 -0.02399154 -0.02265093]\n",
      " [ 0.00373712  0.00534467 -0.02574109 -0.02426906 -0.02291376]\n",
      " [ 0.00367234  0.0051462   0.00661056 -0.02460522 -0.02323471]\n",
      " [ 0.00360761  0.00496625  0.00633308  0.0076953  -0.02361485]\n",
      " [ 0.00354358  0.00480997  0.00607883  0.00736051  0.0086425 ]]\n"
     ]
    }
   ],
   "source": [
    "print(J_ha['C']['r'] @ J_firm_sparse['r']['Z'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=\"4-linear\"></a>\n",
    "\n",
    "## 4 Linearized dynamics using Jacobians\n",
    "Recall that we reduced the model to a single equation $H$\n",
    "\n",
    "$$\n",
    "H_t(K, Z) \\equiv \\mathcal{K}_t\\left(\\left\\{\\alpha Z_s K_{s-1}^{\\alpha-1} - \\delta, (1-\\alpha) Z_s K_{s-1}^{\\alpha}\\right\\}\\right) - K_t = 0.\n",
    "$$\n",
    "\n",
    "to be solved for $K$ given any $Z$.\n",
    "\n",
    "This is the composition of the household capital supply function $\\mathcal{K}$ with the interest rate $r(K_{t-1}, Z_t) = \\alpha Z_t K_{t-1}^{\\alpha-1} - \\delta$ and wage $w(K_{t-1}, Z_t) = (1-\\alpha) Z_t K_{t-1}^{\\alpha}$ functions.\n",
    "\n",
    "We will obtain a linear characterization of all impulse responses in two ways:\n",
    "- First, by duly following the notation and algebra of section 2.2 in the paper. This hands-on approach is transparent, but error-prone in all but the simplest cases.\n",
    "- Second, by leveraging the powerful convenience functions that we introduced in the RBC notebook, and further employ in the one-asset and two-asset HANK notebooks. Throughout this section, we'll use the steady state `ss` we've already solved for, and a 300-period truncation horizon."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1 Hands-on approach\n",
    "\n",
    "##### Step 1: For each block, obtain Jacobians of outputs with respect to inputs\n",
    "Here, we only have two blocks: the firm and household blocks. Getting these Jacobians is quite quick, even for the HA block."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# firm Jacobian: r and w as functions of K and Z\n",
    "J_firm = firm.jac(ss, shock_list=['K', 'Z'])\n",
    "\n",
    "# household Jacobian: curlyK (called 'a' for assets by J_ha) as function of r and w\n",
    "T = 300\n",
    "J_ha = household.jac(ss, T=T, shock_list=['r', 'w'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 2: Compose Jacobians along the computational graph\n",
    "Here, we manually apply the chain rule to calculate the total Jacobians of household $\\mathcal{K}$ with respect to $K$ and $Z$, by composing the partial Jacobians `J_ha` (which maps $r$ and $w$ to $\\mathcal{K}$) and `J_firm` (which maps $K$ and $Z$ to $r$, $w$, and $Y$)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "J_curlyK_K = J_ha['A']['r'] @ J_firm['r']['K'] + J_ha['A']['w'] @ J_firm['w']['K']\n",
    "J_curlyK_Z = J_ha['A']['r'] @ J_firm['r']['Z'] + J_ha['A']['w'] @ J_firm['w']['Z']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we will combine `J_curlyK_K` and `J_curlyK_Z` with the firm Jacobians to get a single nested dict with the total Jacobians of everything with respect to $K$ and $Z$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "J = {**J_firm, 'curlyK': {'K' : J_curlyK_K, 'Z' : J_curlyK_Z}}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 3: Invert $H_K$ to obtain impulse response $dK=-H_K^{-1}H_ZdZ$\n",
    "Now we need to get the Jacobians of our equation $H(K,Z)$, which fully characterizes equilibrium, with respect to $K$ and $Z$. Once we have these, the implicit function theorem gives us the endogenous capital $dK=-H_K^{-1}H_ZdZ$ response to any exogenous shock $dZ$.\n",
    "\n",
    "Recall that $H$ equals household capital supply $\\mathcal{K}$ minus firm capital $K$, so that we can get the Jacobians almost immediately from what we have already calculated."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "H_K = J['curlyK']['K'] - np.eye(T)\n",
    "H_Z = J['curlyK']['Z']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We define $G_K \\equiv -H_K^{-1}H_Z$ to be the matrix mapping from any $dZ$ to the corresponding $dK$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "G = {'K': -np.linalg.solve(H_K, H_Z)} # H_K^(-1)H_Z"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 4: Get all other impulses\n",
    "In `J`, we have Jacobians of $r,w,Y$ with respect to both $Z$ and $K$. If there is a shock to $Z$, we can decompose the change in $r,w,Y$ into a \"direct\" effect from $dZ$ and an \"indirect\" effect from the induced change $dK$.\n",
    "\n",
    "We apply the chain rule to the latter to get matrices $G_r, G_w, G_Y$ mapping any $dZ$ to the corresponding $dr,dw,dY$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "G['r'] = J['r']['Z'] + J['r']['K'] @ G['K']\n",
    "G['w'] = J['w']['Z'] + J['w']['K'] @ G['K']\n",
    "G['Y'] = J['Y']['Z'] + J['Y']['K'] @ G['K']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `G` dict characterizes the full linearized dynamics of aggregate variables $K, r, w, Y$ in response to *any* perturbation to $Z$.\n",
    "\n",
    "If we want the linearized dynamics of other variables, e.g. consumption, all we need is to get the Jacobian from the block in which these are calculated, and then compose it with the `G` of its inputs. It turns out that consumption was already reported in `J_ha`, so we just need to write:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "G['C'] = J_ha['C']['r'] @ G['r'] + J_ha['C']['w'] @ G['w']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2 Convenient approach\n",
    "\n",
    "These steps can be automatized for the entire class of SHADE models. Any SHADE model is characterized by its blocks, exogenous shocks, unknowns, and targets. The only other things we need to know are the steady state around which to linearize, and the truncation horizon.\n",
    "\n",
    "If we define a \"market clearing\" block that returns the target (asset market clearing), we can get the general equilibrium Jacobians by simply calling `jacobian.get_G`. Note that `get_G` takes in the model blocks (in arbitrary order), the names of exogenous shocks, the names of unknown endogenous variables, the names of target equations, the truncation horizon, and the steady state dict."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "@simple\n",
    "def mkt_clearing(K, A):\n",
    "    asset_mkt = A - K\n",
    "    return asset_mkt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "G2 = jac.get_G(block_list=[firm, mkt_clearing, household],  # we could replace household with J_ha here\n",
    "               exogenous=['Z'],\n",
    "               unknowns=['K'],\n",
    "               targets=['asset_mkt'],\n",
    "               T=T, ss=ss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's verify that the two give the same answer up to high precision (`assert` throws an error if its argument evaluates to False)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "for o in G:\n",
    "    assert np.allclose(G2[o]['Z'], G[o])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2 Results\n",
    "What do the impulse responses in this model look like? The beauty of our method is that, now that we have $G$, we can compute impulse responses to any shock almost instantaneously -- it's just matrix multiplication!\n",
    "\n",
    "Let's first consider shocks to $Z$ with different persistences, all normalized so that they have a 1% initial impact, and plot the interest rate response to each."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "rhos = np.array([0.2, 0.4, 0.6, 0.8, 0.9])\n",
    "dZ = 0.01*ss['Z']*rhos**(np.arange(T)[:, np.newaxis]) # get T*5 matrix of dZ\n",
    "dr = G['r'] @ dZ\n",
    "plt.plot(10000*dr[:50, :])\n",
    "plt.title(r'$r$ response to 1% $Z$ shocks with $\\rho=(0.2 ... 0.9)$')\n",
    "plt.ylabel(r'basis points deviation from ss')\n",
    "plt.xlabel(r'quarters')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let's consider 10,000 different values of rho, for which we can still calculate all $r$ impulse responses almost instantaneously."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 65.7 ms, sys: 19.3 ms, total: 85.1 ms\n",
      "Wall time: 44 ms\n"
     ]
    }
   ],
   "source": [
    "rhos = np.linspace(0.1, 0.9, 10000)\n",
    "dZ = 0.01*ss['Z']*rhos**(np.arange(T)[:, np.newaxis]) # get T*5 matrix of dZ\n",
    "%time dr = G['r'] @ dZ"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The time taken here differs from run to run, but in the current run (like all runs on a personal laptop) it takes less than 50 milliseconds of \"wall time\" to compute 10,000 impulse responses means that each impulse response takes less than **5 microseconds**. \"CPU time\" is slightly higher because mild parallelization on two cores is used by the built-in matrix multiplication implementation. By contrast, typical impulse response calculations in heterogeneous agent models in the literature take at least a minute, so this method is more than **10 million** times faster as a way of calculating individual impulse responses.\n",
    "\n",
    "Although this may seem like an extreme example, repeated calculations of this form are quite useful in the most computationally demanding applications, like estimation (as we will see later).\n",
    "\n",
    "Another important feature of our sequence space methodology is that it is easy to calculate the response to shocks that are difficult to cast into simple recursive form, like news shocks.\n",
    "\n",
    "For example, calculating the response to a news shock where $Z$ is expected to increase at a specific period in the future is trivial -- in fact, that's exactly what the columns of the $G$ matrix are. Below we plot the capital responses to news shocks of $Z$ increases at periods 5, 10, 15, 20, and 25."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dZ = 0.01*(np.arange(T)[:, np.newaxis] == np.array([5, 10, 15, 20, 25]))\n",
    "dK = G['K'] @ dZ\n",
    "plt.plot(dK[:50])\n",
    "plt.title('$K$ response to 1% Z news shocks for $t=5,...,25$')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=\"5-estimate\"></a>\n",
    "\n",
    "## 5 Estimation\n",
    "\n",
    "The roadmap for estimation is as follows:\n",
    " - impulse responses $\\implies$ second moments\n",
    " - second moments $\\implies$ log-likelihood\n",
    " \n",
    "In this notebook, we will simply use simulated data to show that the log-likelihood peaks close to the true value of the estimated parameter, the standard deviation of TFP shocks. \n",
    "\n",
    "### 5.1 Second moments \n",
    "Thanks to certainty equivalence, linear impulse responses can be interpreted as the $MA(\\infty)$ representation of the model. Then all we need is the second moments of the shocks to fully characterize the second moments of endogenous outcomes. This computation can be done in a highly efficient way, without any need for simulation.\n",
    "\n",
    "For concreteness, let's suppose that the TFP shocks $dZ$ in the Krusell-Smith model have a persistent and transitory component.\n",
    "\n",
    "$$\n",
    "\\begin{align*}\n",
    "dZ_t &= dZ^1_t + d Z_t^2\n",
    "\\\\\n",
    "dZ_t^1 &= \\rho d Z_{t-1}^1 + \\epsilon^1_t\n",
    "\\\\\n",
    "d Z_t^2 &= \\epsilon^2_t\n",
    "\\end{align*}\n",
    "$$\n",
    "\n",
    "where $\\epsilon^1$ and $\\epsilon^2$ are i.i.d. normal with mean zero and with variance $\\sigma^2_1$ and $\\sigma^2_2$. \n",
    "\n",
    "Let $m^{x, 1}$ and $m^{x,2}$ denote the (truncated) impulse responses of variable $X$ to these two structural shocks. Then we have an $MA(T-1)$ representation:\n",
    "\n",
    "$$\n",
    "X_t = \\sum_{z=1}^{2} \\sum_{s=0}^{T-1} m^{x,z}_s \\epsilon_{t-s}^z \n",
    "$$\n",
    "\n",
    "It follows that covariances between outcomes $Y$ and $X$ take the form\n",
    "\n",
    "$$\n",
    "\\text{Cov}(Y_t, X_{t+l})= \\sum_{z=1}^{2} \\sigma_z^2 \\sum_{s=0}^{T-1} m_s^{x,z} m_{s+l}^{y,z} \\tag{Cov}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 1. Stacked impulse responses\n",
    "\n",
    "Given the $G$ matrix we calculated in section 4, this is just a matter of matrix multiplication:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "rho = 0.9\n",
    "sigma_persist = 0.1\n",
    "sigma_trans = 0.2\n",
    "\n",
    "dZ1 = rho**(np.arange(T))\n",
    "dY1, dC1, dK1 = G['Y'] @ dZ1, G['C'] @ dZ1, G['K'] @ dZ1\n",
    "dX1 = np.stack([dZ1, dY1, dC1, dK1], axis=1)\n",
    "\n",
    "dZ2 = np.arange(T) == 0\n",
    "dY2, dC2, dK2 = G['Y'] @ dZ2, G['C'] @ dZ2, G['K'] @ dZ2\n",
    "dX2 = np.stack([dZ2, dY2, dC2, dK2], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's stack all these to make a $T\\times 4 \\times 2$ array giving all impulse responses of the four outcomes to the two shocks:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(300, 4, 2)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dX = np.stack([dX1, dX2], axis=2)\n",
    "dX.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 2. Obtain covariance at all leads and lags\n",
    "\n",
    "The covariance formula above is implemented efficiently using the Fast Fourier Transform by the `all_covariances` function, which returns a $T\\times 4\\times 4$ array `Sigma`, where `Sigma[l, o1, o2]` gives the covariance for any $t$ between output `o1` at $t$ and output `o2` at $t+l$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 932 µs, sys: 9 µs, total: 941 µs\n",
      "Wall time: 478 µs\n"
     ]
    }
   ],
   "source": [
    "sigmas = np.array([sigma_persist, sigma_trans])\n",
    "Sigma = est.all_covariances(dX, sigmas) # burn-in for jit\n",
    "%time Sigma = est.all_covariances(dX, sigmas)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Visualizing correlations\n",
    "\n",
    "Let's turn the covariance matrix `Sigma` into a correlation matrix, by normalizing it with the standard deviation of each series:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "sd = np.sqrt(np.diag(Sigma[0, ...]))\n",
    "correl = (Sigma/sd)/(sd[:, np.newaxis])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, let's plot $\\text{corr}(dZ_t,dZ_{t+l})$, $\\text{corr}(dZ_t,dY_{t+l})$, $\\text{corr}(dZ_t,dC_{t+l})$, and $\\text{corr}(dZ_t,dK_{t+l})$, for $l$ from $-50$ through $50$: the correlations of all series, at various lags, with the driving productivity process."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ls = np.arange(-50, 51)\n",
    "corrs_l_positive = correl[:51, 0, :]\n",
    "corrs_l_negative = correl[50:0:-1, :, 0]\n",
    "corrs_combined = np.concatenate([corrs_l_negative, corrs_l_positive])\n",
    "\n",
    "plt.plot(ls, corrs_combined[:, 0], label='dZ')\n",
    "plt.plot(ls, corrs_combined[:, 1], label='dY')\n",
    "plt.plot(ls, corrs_combined[:, 2], label='dC')\n",
    "plt.plot(ls, corrs_combined[:, 3], label='dK')\n",
    "plt.legend()\n",
    "plt.title(r'Corr of $dZ_t$ and $X_{t+l}$ for various series $X$')\n",
    "plt.xlabel(r'Lag $l$')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we can see many features of the solution. First, $dY$ is extremely similar to $dZ$, except that it has a greater lagged response due to capital accumulation. Both $dZ$ and $dY$ have a large peak at $l=0$ corresponding to the transitory shock. $dC$ and $dK$, on the other hand, are both much smoother and tend to lag $dZ$, especially $dK$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.2 Log-likelihood\n",
    "\n",
    "Assuming the means of all series are zero (which is often imposed through some kind of preliminary demeaning or detrending procedure on the data), and that the shocks are multivariate normal, all we really need to evaluate the log-likelihood are the second moments and the data.\n",
    "\n",
    "Specifically, if our data observations are stacked in a vector $\\mathbf{y}$ and the covariances at all lags are stacked in a matrix $\\mathbf{V}$, then the log-likelihood is (up to a constant):\n",
    "\n",
    "$$\n",
    "\\mathcal{L} = -\\frac{1}{2}\\log(\\det(\\mathbf{V})) - \\frac{1}{2}\\mathbf{y}'\\mathbf{V}^{-1}\\mathbf{y} \\tag{log-likelihood}\n",
    "$$ \n",
    "\n",
    "Our code proceeds directly from the covariances `Sigma` at all lags returned by `all_covariances` in the last section, and the matrix of data series, implementing (log-likelihood) under the hood to calculate the log-likelihood."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 3.71 ms, sys: 153 µs, total: 3.87 ms\n",
      "Wall time: 1.94 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "-52212.80116916728"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# random 100 observations\n",
    "Y = np.random.randn(100, 4)\n",
    "\n",
    "# 0.05 measurement error in each variable\n",
    "sigma_measurement = np.full(4, 0.05)\n",
    "\n",
    "# calculate log-likelihood\n",
    "est.log_likelihood(Y, Sigma, sigma_measurement)\n",
    "\n",
    "%time est.log_likelihood(Y, Sigma, sigma_measurement)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.3 Putting it together: calculating the likelihood in an example\n",
    "Continue to consider the shock process from section 5.1, where $dZ$ had one persistent component and one transitory component. Imagine that we do not know the persistence parameter $\\rho$ of the persistent component, nor do we know the relative variances of these two shocks or the variances of the measurement errors. Given some observed data $\\mathbf{w}$ with 100 observations of $dZ, dY, dC, dY$, what does the log-likelihood as a function of these parameters look like, and how do we compute it?\n",
    "\n",
    "We write the following function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "def log_likelihood_from_parameters(rho, sigma_persist, sigma_trans, sigma_measurement, Y):\n",
    "    # impulse response to persistent shock\n",
    "    dZ1 = rho**(np.arange(T))\n",
    "    dY1, dC1, dK1 = G['Y'] @ dZ1, G['C'] @ dZ1, G['K'] @ dZ1\n",
    "    dX1 = np.stack([dZ1, dY1, dC1, dK1], axis=1)\n",
    "    \n",
    "    # since transitory shock does not depend on any unknown parameters,\n",
    "    # except scale sigma_trans, we just reuse the dX2 already calculated earlier!\n",
    "    \n",
    "    # stack impulse responses together to make MA(T-1) representation 'M'\n",
    "    M = np.stack([dX1, dX2], axis=2)\n",
    "    \n",
    "    # calculate all covariances\n",
    "    Sigma = est.all_covariances(M, np.array([sigma_persist, sigma_trans]))\n",
    "    \n",
    "    # calculate log=likelihood from this\n",
    "    return est.log_likelihood(Y, Sigma, sigma_measurement)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Simulate sample data.** Now let's simulate more realistic series $w=\\{dZ, dY, dC, dK\\}$, assuming the same parameters as above, to see what evaluating the log-likelihood is like."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "# stack covariances into matrix using helper function, then do a draw using NumPy routine\n",
    "V = est.build_full_covariance_matrix(Sigma, sigma_measurement, 100)\n",
    "Y = np.random.multivariate_normal(np.zeros(400), V).reshape((100, 4))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let's plot the log-likelihood of $w$ as a function of the standard deviation of the persistent component (the true value of which is 0.1), given correct values for all other parameters. Note that evaluating the log-likelihood 100 times takes well below one second."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 608 ms, sys: 43.3 ms, total: 651 ms\n",
      "Wall time: 349 ms\n"
     ]
    }
   ],
   "source": [
    "sigma_persist_values = np.linspace(0.05, 0.2, 100)\n",
    "%time lls = np.array([log_likelihood_from_parameters(rho, sigma_persist, sigma_trans, sigma_measurement, Y) for sigma_persist in sigma_persist_values])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(sigma_persist_values, lls)\n",
    "plt.axvline(0.1, linestyle=':', color='gray')\n",
    "plt.title(r'Log likelihood of simulated data as function of $\\sigma_{persist}$')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Reassuringly, the mode is near (although not exactly at, since we're simulating a finite sample with only 100 periods) the value of $\\sigma_{persist}=0.1$ with which the data was simulated!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=\"7-nonlinear\"></a>\n",
    "\n",
    "## 7 Nonlinear perfect foresight dynamics\n",
    "Linearized impulse responses are invariant to the sign and size of aggregate shocks by construction. Although this is not a problem for many applications, it is clearly a limitation. Here, we demonstrate that the Jacobian is also extremely useful in solving for nonlinear dynamics.\n",
    "\n",
    "Consider the case of an economy that starts at the steady state, and receives an unexpected shock at date 0. This is often called an \"MIT shock\". \n",
    "\n",
    "For a given shock $Z$, the solution is still characterized by the $K$ that solves $H(K,Z)=0$. Our algorithm to find this $K$, a simple variant of Newton's method, iterates on a sequence of guesses $K^j$ for the path of capital as follows:\n",
    "1. starting with $j=0$, guess a path $K^0$\n",
    "2. calculate $H(K^j, Z)$\n",
    "3. update the guess according to $$K^{j+1} = K^j - H_K(K_{ss}, Z_{ss})^{-1} H(K^j, Z)$$\n",
    "and return to step 2 for $j+1$\n",
    "\n",
    "The only difference between this and the standard Newton's method is that we use the Jacobian $H_K$ around the steady state (which we have already calculated), rather than the Jacobian around the current guess (which is somewhat more difficult to calculate). Still, this tends to achieve extremely fast convergence.\n",
    "\n",
    "Although iterative methods to solve for equilibrium in response to MIT shocks are quite common in the heterogeneous-agent literature, these methods generally use ad-hoc rules for updating the guess, which can be fragile and slow. In applications with no or limited heterogeneity (such as spender-saver models) where it is possible to calculate Jacobians easily, Newton's method has been used to provide faster and more robust convergence -- see, for instance, [Juillard (1996)](http://www.cepremap.fr/depot/couv_orange/co9602.pdf).\n",
    "\n",
    "But until now, this has not been applied to heterogeneous-agent models, since the Jacobian has been too difficult to calculate. The only partial applications to date, to our knowledge, are in [Auclert and Rognlie (2018)](http://web.stanford.edu/~aauclert/computational_appendix_inequad.pdf), which uses an auxiliary model to compute an approximate Jacobian, and in [Straub (2018)](https://scholar.harvard.edu/files/straub/files/jmp_straub_jan_2.pdf), which uses interpolation to compute an approximate Jacobian. In this paper, however, we have provided a highly efficient method to compute the *exact* Jacobian around the steady state for any heterogeneous-agent model, and can thus readily apply Newton's method."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 7.1 Implementation\n",
    "\n",
    "Our quasi-Newton method can be implemented in two steps. First, build the nonlinear function $H(U, Z).$ Second, guess $U$ for a given $Z$ and iterate until convergence. We automatized both of these, so all we need to do is call a single function, `nonlinear.td_solve`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "On iteration 0\n",
      "   max error for asset_mkt is 3.37E-02\n",
      "On iteration 1\n",
      "   max error for asset_mkt is 5.73E-05\n",
      "On iteration 2\n",
      "   max error for asset_mkt is 1.26E-07\n",
      "On iteration 3\n",
      "   max error for asset_mkt is 1.75E-10\n"
     ]
    }
   ],
   "source": [
    "Z = ss['Z'] + 0.01*0.8**np.arange(T)\n",
    "\n",
    "td_nonlin = nonlinear.td_solve(ss=ss, block_list=[firm, household, mkt_clearing],\n",
    "                               unknowns=['K'], targets=['asset_mkt'], H_U=H_K, monotonic=True, Z=Z)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see that this is quite quick, taking only 3 iterations after the initial guess to achieve high accuracy -- far fewer than typical ad-hoc updating rules, which can take hundreds or even thousands of iterations.\n",
    "\n",
    "Now let's compare to the results we'd get for the linearized impulse response, and plot the paths for the real interest rate $r$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "dr_nonlin = 10000 * (td_nonlin['r'] - ss['r'])\n",
    "dr_lin = 10000 * G['r'] @ (Z - ss['Z'])\n",
    "\n",
    "plt.plot(dr_nonlin[:50], label='nonlinear', linewidth=2.5)\n",
    "plt.plot(dr_lin[:50], label='linear', linestyle='--', linewidth=2.5)\n",
    "plt.title(r'Interest rate response to a 1% TFP shock')\n",
    "plt.ylabel(r'bp deviation from ss')\n",
    "plt.xlabel(r'quarters')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There is no visible difference -- the first-order approximation is almost perfect here.\n",
    "\n",
    "If we increase the size of the productivity shock on impact to 10% (enormous!), we can begin to see small nonlinearities kick in, and the solution requires five iterations rather than three:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "On iteration 0\n",
      "   max error for asset_mkt is 3.47E-01\n",
      "On iteration 1\n",
      "   max error for asset_mkt is 5.22E-03\n",
      "On iteration 2\n",
      "   max error for asset_mkt is 1.16E-04\n",
      "On iteration 3\n",
      "   max error for asset_mkt is 1.69E-06\n",
      "On iteration 4\n",
      "   max error for asset_mkt is 1.13E-08\n",
      "On iteration 5\n",
      "   max error for asset_mkt is 2.95E-10\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Z = ss['Z'] + 0.1*0.8**np.arange(T)\n",
    "\n",
    "td_nonlin = nonlinear.td_solve(ss, [firm, household, mkt_clearing], ['K'], ['asset_mkt'], H_K, monotonic=True, Z=Z)\n",
    "\n",
    "# extract interest rate response, scale to basis points\n",
    "dr_nonlin = 10000 * (td_nonlin['r'] - ss['r'])\n",
    "dr_lin = 10000 * G['r'] @ (Z - ss['Z'])\n",
    "\n",
    "plt.plot(dr_nonlin[:50], label='nonlinear', linewidth=2.5)\n",
    "plt.plot(dr_lin[:50], label='linear', linestyle='--', linewidth=2.5)\n",
    "plt.title(r'$r$ response to 10% $Z$ shock')\n",
    "plt.ylabel(r'bp deviation from ss')\n",
    "plt.xlabel(r'quarters')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
